有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript如何在JS中取消Java“DES/CBC/PKCS5Padding”?

我在Java中加密单词“hello”:

  • 加密字符串:GJ+DYHGmdTQ=
  • 算法:DES/CBC/PKCS5P
  • 关键字:01234567
  • iv:89012345

我可以用Java解密此字符串:

    Cipher deCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    String encryptionKey = "0123456789012345";
    byte[] ivBytes = encryptionKey.substring(0, 8).getBytes();
    byte[] keyBytes = encryptionKey.substring(8, 8 + 8).getBytes();

    deCipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(new DESKeySpec(keyBytes).getKey(), "DES"),  new IvParameterSpec(ivBytes));

    System.out.println(
            new String(
                    deCipher.doFinal(
                            Base64.getDecoder().decode(
                                    "GJ+DYHGmdTQ="
                            )
                    ),
                    StandardCharsets.UTF_8
            )
    );

我无法在JavaScript中解密此字符串。以下是我的JS代码:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
<script type="text/javascript">
    let encrypted = "GJ+DYHGmdTQ="; // encrypted hello
    let secret = "0123456789012345";

    let key = secret.substr(0, 8);
    let iv = secret.substr(8, 8);

    let keyHex = CryptoJS.enc.Utf8.parse(key);
    let ivHex = CryptoJS.enc.Utf8.parse(iv);

    let encryptedHex = CryptoJS.enc.Base64.parse(encrypted);

    let decrypted = CryptoJS.DES.decrypt(
        {ciphertext: encryptedHex},
        keyHex,
        {
            iv: ivHex
            , mode: CryptoJS.mode.CBC
            , padding: CryptoJS.pad.Pkcs7
        }
    );
    console.log(encryptedHex);
    console.log(decrypted);
    console.log(decrypted.toString(CryptoJS.enc.Utf8));
</script>

共 (0) 个答案